/*
 * Copyright 2010,2011 Michael Nitsche
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.mnit.schnipsel.swt.dialog;

import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;

import de.mnit.basis.daten.konstant.position.POSITION_H;
import de.mnit.basis.daten.konstant.position.POSITION_V;
import de.mnit.basis.fehler.system.F_Sys_InOut;
import de.mnit.basis.swt.anw.A_MN_Dialog;
import de.mnit.basis.swt.anw.A_MN_Gruppe;
import de.mnit.basis.swt.dialog.SWT_Dialog_Datei;
import de.mnit.basis.swt.element.S_SWT_Komponente;
import de.mnit.basis.swt.element.steuer.SWT_Knopf;
import de.mnit.basis.swt.element.steuer.SWT_Knopf_Wechsel;
import de.mnit.basis.swt.element.steuer.SWT_Label;
import de.mnit.basis.swt.element.steuer.rollbar.SWT_TextEingabe;
import de.mnit.basis.swt.element.steuer.rollbar.gruppe.bild.deko.SWT_Fenster;
import de.mnit.basis.swt.element.steuer.rollbar.gruppe.bild.deko.S_Fenster;
import de.mnit.basis.swt.grafik.icon.direkt.ICON;
import de.mnit.basis.swt.layout.LayoutGitter;
import de.mnit.basis.swt.layout.LayoutKnopfWechsel;
import de.mnit.basis.sys.datei.DSDatei;
import de.mnit.basis.sys.datei.DSLokal;
import de.mnit.basis.sys.datei.S_Datei;
import de.mnit.basis.sys.sprache.S;
import de.mnit.schnipsel.div.KonfigLokal;

/**
 * @author Michael Nitsche
 * 19.10.2010	Erstellt
 */
public class Dialog_Speichern extends A_MN_Dialog<Dialog_Speichern,S_Datei> {

	public static void main(String[] args)   { start(Dialog_Speichern.class); }


	private static final S s=new S(Dialog_Speichern.class);
	private final SWT_TextEingabe	k_ziel		= new SWT_TextEingabe();
	private final SWT_Label			k_text_ziel	= new SWT_Label();
	private final SWT_Knopf			k_suche		= new SWT_Knopf();
	private final SWT_Knopf_Wechsel	k_txt		= new SWT_Knopf_Wechsel();
	private final SWT_Knopf_Wechsel	k_htm		= new SWT_Knopf_Wechsel();
	private final SWT_Knopf_Wechsel	k_rtf		= new SWT_Knopf_Wechsel();
	private final SWT_Knopf_Wechsel	k_pdf		= new SWT_Knopf_Wechsel();
	private final SWT_Knopf			k_ok		= new SWT_Knopf();
	private final SWT_Knopf			k_abbruch	= new SWT_Knopf();
	private S_Datei erg=null;


	// ERSTELLEN

	protected S_Datei gErgebnis2() {
		return this.erg;
	}

	protected S_SWT_Komponente<?, ? extends Composite> layout() {
		LayoutKnopfWechsel mitte=LayoutKnopfWechsel.neu(false, t.k_txt, t.k_htm, t.k_rtf, t.k_pdf);

		LayoutGitter oben=LayoutGitter.neu()
			.sSpaltenAnzahl(3)
			.sKomponente(t.k_text_ziel)
				.sBreite(35)
//				.sFlexibelV()
				.sPositionV(POSITION_V.MITTE)
			.sKomponente(t.k_ziel)
				.sFlexibel()
			.sKomponente(t.k_suche)
				.sBreite(50)
				.sFlexibelV()
			.fertig();

		return LayoutGitter.neu()
			.sSpaltenAnzahl(2)
			.sZwischenraumV(10)
			.sAussenabstand(5)
			.sSpaltenAusgleichen()
			.sKomponente(oben)
				.sUebergreifendH(2)
				.sFlexibelH()
				.fertig()
			.sKomponente(mitte)
				.sUebergreifendH(2)
				.sFlexibelH()
				.fertig()
			.sKomponente(t.k_abbruch)
				.sBreite(100)
				.sPositionH(POSITION_H.LINKS)
				.fertig()
			.sKomponente(t.k_ok)
				.sBreite(100)
				.sPositionH(POSITION_H.RECHTS)
				.fertig()
			;
	}

	protected void initStyle() {
		t.k_text_ziel.sText(s.t("Ziel:"));

		t.k_suche.sBild(ICON._16.OBJ_LUPE);

		t.k_txt.sBild(ICON._32.OBJ_NOTIZBLOCK);
		t.k_rtf.sBild(ICON._32.OBJ_DISKETTE);
		t.k_htm.sBild(ICON._32.OBJ_INTERNET);
		t.k_pdf.sBild(ICON._32.OBJ_ADRESSBUCH);

		t.k_txt.sTip(	s.t("Text"));
		t.k_rtf.sTip(	s.t("RichTextFormat (rtf)"));
		t.k_htm.sTip(	s.t("HTML"));
		t.k_pdf.sTip(	s.t("PDF"));

		String stdFormat=KonfigLokal.i().schnipselExportFormat();
		iSetze(stdFormat);

		t.k_pdf.sAktiviert(false);
		t.k_rtf.sAktiviert(false);

		t.k_ok.sText(s.t("Ok"));
		t.k_abbruch.sText(s.t("Abbruch"));

		t.k_ok.sBild(ICON._16.AKTION_OK);
		t.k_abbruch.sBild(ICON._16.AKTION_ABBRUCH);

		t.k_ziel.sFokus();
	}

	protected void initEvents() {
		t.k_abbruch.eAuswahl(new Listener() {
			public void handleEvent(Event event) {
				t.schliessen();
			}
		});

		t.k_ok.eAuswahl(new Listener() {
			public void handleEvent(Event event) {
				iOK();
			}
		});

		t.k_ziel.eTasteEnter(new Listener() {
			public void handleEvent(Event e) {
				iOK();
			}
		});

		t.k_suche.eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				SWT_Dialog_Datei dd=new SWT_Dialog_Datei("Datei speichern", "*.rtf", "*.html", "*.pdf", "*.txt");
				String[] datei=dd.gErgebnisSuffix(DSLokal.home());
				if(datei==null || datei.length!=1)
					return;
				S_Datei datei2=DSDatei.neu(datei[0]);
				t.k_ziel.sText(datei2.gPfadKomplett());
				iSetze(datei2.gEndung());
			}
		});
	}

	protected S_Fenster<?> fenster(A_MN_Gruppe<?> instanz) throws F_Sys_InOut {
		return SWT_Fenster.neu(instanz, true, 400, 135, s.t("Eintrag speichern"),
			ICON._16.OBJ_ERDE, ICON._24.OBJ_ERDE, ICON._32.OBJ_ERDE);
	}

	// INTERN

	private void iOK() {
		String format=
			t.k_txt.gWert() ? "txt" :
			t.k_rtf.gWert() ? "rtf" :
			t.k_htm.gWert() ? "html" :
			"pdf";
		this.erg=DSDatei.neu(t.k_ziel.gText());
		String endung=erg.gEndung();
		if(format.equals("txt") && !endung.equals("txt"))
			this.erg.sEndung(format);
		if(format.equals("rtf") && !endung.equals("rtf"))
			this.erg.sEndung(format);
		if(format.equals("pdf") && !endung.equals("pdf"))
			this.erg.sEndung(format);
		if(format.equals("html") && !endung.equals("html") && !endung.equals("htm"))
			this.erg.sEndung(format);

		KonfigLokal.i().schnipselExportFormat(format);
		t.schliessen();
	}

	private void iSetze(String suffix) {
		t.k_rtf.sWert(	suffix.equalsIgnoreCase("rtf"));
		t.k_htm.sWert(	suffix.equalsIgnoreCase("htm") || suffix.equalsIgnoreCase("html"));
		t.k_pdf.sWert(	suffix.equalsIgnoreCase("pdf"));
		t.k_txt.sWert(	suffix.equalsIgnoreCase("txt"));
	}
}
